// These are meant to be typed into the REPL. You can also run
// scala -Xnojline < repl-session.scala to run them all at once.


/**
  * 6.5闭包
  * 闭包就是一个函数把外部的那些不属于自己的对象也包含(闭合)进来了。
  *闭包机制使用起来就像是一个函数样板。
  * @param factor
  * @return
  */
def mulBy(factor : Double) = (x : Double) => factor * x

val triple = mulBy(3)
val half = mulBy(0.5)
println(triple(14) + " " + half(14))

/**
  * 1)匿名函数(x : Double) => factor * x嵌套在函数mulBy中。
  * 2)匿名函数(x : Double) => factor * x使用了外部变量、mulBy的局部变量
  * factor。不是全局变量
  * 3)函数mulBy返回了引用局部变量的匿名函数。
  */
/*
triple、half这两个函数就叫闭包，闭包由代码和代码用到的任何非局部变量定义构成。
注意：有权访问另一个函数作用域内变量。
 */


